home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / web / fweb / READ_ME < prev    next >
Text File  |  1993-10-29  |  24KB  |  722 lines

  1.              --- FWEB PUBLIC FILES ---
  2.             Last update: October 30, 1993
  3.  
  4. IMPORTANT NOTICES (most recent first):
  5.  
  6. ===============================================================================
  7.  
  8. NOTICE (October 30, 1993)
  9.  
  10. Version 1.40 is available.  However, THIS VERSION IS NOT RECOMMENDED FOR
  11. NEW USERS OR FOR LARGE PROGRAMMING PROJECTS ALREADY DEPENDENT ON A STABLE
  12. FWEB ENVIRONMENT.  If you're not willing to experiment, stick to v1.30.
  13. Proceed at your own risk!  For more information, see READ_ME-1.40.
  14.  
  15. ========================================
  16.  
  17. (The following notices pertain to v1.30.)
  18.  
  19. NOTICE (August 16, 1993)
  20.  
  21. SGI machines have a non-ANSI ctype.h that breaks certain parts of FWEB.
  22. One symptom is that Fortran comments beginning with `//' are not processed
  23. correctly.  To fix this, change the last few lines of includes.hweb to
  24.  
  25. -------------------------------------------------------------------------------
  26. #include <ctype.h> // ANSI: Character classification macros.
  27.  
  28. #undef isalpha
  29. #define isalpha(c) (isascii(c) && ((_ctype + 1)[c] & (01 | 02)))
  30.  
  31. #include <setjmp.h> // ANSI: |longjmp| and |setjmp|.
  32.  
  33. @I time.hweb // Timing's quite an annoyance.
  34. -------------------------------------------------------------------------------
  35.  
  36. Furthermore, change the lines in common.hweb
  37.  
  38. -------------------------------------------------------------------------------
  39. /* Scan over subsequent elements of an identifier. */
  40.   while (isAlpha(*++loc) || isDigit(*loc) || 
  41.     *loc==@'_' || *loc==@'$' || (in_format && *loc==@'.') );
  42. -------------------------------------------------------------------------------
  43.  
  44. to
  45.  
  46. -------------------------------------------------------------------------------
  47. /* Scan over subsequent elements of an identifier. */
  48.   for(++loc; isAlpha(*loc) || isDigit(*loc) || 
  49.     *loc==@'_' || *loc==@'$' || (in_format && *loc==@'.'); loc++)
  50.         ;
  51. -------------------------------------------------------------------------------
  52.  
  53. then remake the release by saying ``make''.  (Don't say ``make bootstrap'',
  54. as that prevents new *.c files from being tangled.)
  55.  
  56. NOTICE (July 28, 1993)
  57.  
  58.   Users of VAX' cc should change the macro definitions in ftangle.c
  59.  
  60. --------------------
  61. #define TRUE  
  62. #define FALSE  !\
  63. --------------------
  64. to 
  65.  
  66. --------------------
  67. #define M_TRUE  
  68. #define M_FALSE  !\
  69. --------------------
  70.  
  71. and also change the lines
  72.  
  73. --------------------
  74. case m_ifdef:
  75. DEF_OR_NDEF(TRUE);
  76. break;
  77.  
  78. case m_ifndef:
  79. DEF_OR_NDEF(FALSE);
  80. break;
  81. --------------------
  82.  
  83. to
  84.  
  85. --------------------
  86. case m_ifdef:
  87. DEF_OR_NDEF(M_TRUE);
  88. break;
  89.  
  90. case m_ifndef:
  91. DEF_OR_NDEF(M_FALSE);
  92. break;
  93. --------------------
  94.  
  95. (Consider using gcc instead.)
  96.  
  97. NOTICE (July 8, 1993)
  98.  
  99.   There are two problems with 1.30a on IBM-RISC's.  First, a cc compiler
  100. message like
  101.  
  102. -------------------------------------------------------------------------------
  103. ftangle.c", line 4527.32: 1506-025 (S) Operand must be a modifiable lvalue.
  104. -------------------------------------------------------------------------------
  105.  
  106. refers to the line in ftangle.c
  107.  
  108. -------------------------------------------------------------------------------
  109. n= MIN(end-np->byte_start,MAX_ID_LENGTH-1);
  110. -------------------------------------------------------------------------------
  111.  
  112. This expands into a ?: construction, and it's complaining about the ? for
  113. some reason.  This appears to be a compiler bug; if you don't think so,
  114. please explain.  In any event, it should work if you replace that line by 
  115.  
  116. -------------------------------------------------------------------------------
  117. #if 0
  118. n= MIN(end-np->byte_start,MAX_ID_LENGTH-1);
  119. #endif
  120. if(end - np->byte_start < 31)
  121.      n = end - np->byte_start;
  122. else
  123.      n = 31;
  124. -------------------------------------------------------------------------------
  125.  
  126.   Second, the link stage will fail with missing ftime; to fix that, say
  127.  
  128. -------------------------------------------------------------------------------
  129. make LIBS="-lbsd -lm"
  130. -------------------------------------------------------------------------------
  131.  
  132. NOTICE (June 25, 1993)
  133.  
  134.   Executable files for the IBM-PC with MS-DOS are available in
  135.  
  136.     /pub/fweb/executables/fweb-1.30/*.exe
  137.  
  138. The file ftangle0.exe is ftangle sans Ratfor, for a modest savings in size.
  139.  
  140. NOTICE (June 18, 1993)
  141.  
  142.   Sun users running Solaris should invoke the Makefile with
  143.  
  144.     make bootstrap LIBS="-L/usr/ucblib -lucb -lelf -lm"
  145.  
  146. NOTICE (June 17, 1993)
  147.  
  148.   FWEB 1.30 was updated to 1.30a to several difficulties with @o processing.
  149. If you installed version 1.30 before today, you can either reinstall from
  150. the new tar file or contact me for change files.
  151.  
  152. NOTICE (June 10, 1993)
  153.  
  154.   The final version of FWEB v1.30 is available. 
  155.  
  156.   This release contains a few bug fixes and features a more standard and
  157. complete installation procedure for Unix users.  For more details, see
  158. fweb-1.30/READ_ME.FWEB.
  159.  
  160.   In the transition from v1.30--beta to v1.30, the following changes were
  161. made:
  162.  
  163.     Moved Makefile to web/Makefile.
  164.     Added manual/Makefile.
  165.     Added the ./configure automatic installation option.
  166.  
  167.     Greatly augmented the texinfo file.
  168.  
  169.     Changed -a to -A.
  170.     Removed a few upper-case command-line options that weren't
  171. documented and had lower-case equivalents.
  172.     Added -E option (change delimiter for file-name extension)
  173.     Changed -I to -i! (don't read include file)
  174.     Added environment variable FWEB_INCLUDES (set directory list for
  175. include files)
  176.     Added -I option (append to directory list for include files)
  177.     Added -Wf option (don't weave @f statements) in response to user
  178. requests. 
  179.  
  180.     Added the preprocessor token '#,' (non-delimiting comma).
  181.     Beautified the woven output from TeX mode by improving the handling
  182. of tabs (they're now turned into the string macro \3).
  183.  
  184.     Found various (non-gcc) compiler bugs, and kludged the code.
  185.     Fixed an egregious bug related to file opens.
  186.     Fixed a few microscopic bugs.
  187.  
  188. -------------------------------------------------------------------------------
  189.  
  190. NOTICE (January 5, 1993):
  191.  
  192.   Please note that Marcus Speh's fweb-faq, ``FWEB in Questions and
  193. Answers,'' is now available in /pub/fweb/faq.  This may serve as an
  194. additional source of information for those who are intimidated by the
  195. manual.
  196.  
  197.   Incidently, note that the user/syntax reference guide can be obtained
  198. independently of the full manual.  If you're a seasoned WEB user, the
  199. reference guide should be adequate.
  200.  
  201. ===============================================================================
  202.  
  203.   The public version of FWEB is now contained in this directory in tar
  204. files of the form fweb-1.30.tar.Z.  If there is more than one tar file, pick
  205. the one with the highest version number unless you have some specific
  206. reason to pick another one.  To unpack the tar file, do the following:
  207.  
  208.     uncompress fweb-1.30.tar
  209.     tar -xvf fweb-1.30.tar
  210.  
  211. This creates the directory fweb-1.30.  For installation instructions, see
  212. fweb-1.30/READ_ME.FWEB.  
  213.  
  214.   The tar files do not contain executable files.  Executable files for the
  215. IBM-PC may (or may not, depending on my progress) be found in the
  216. subdirectory ./executables.
  217.  
  218.   Here's a summary of the versions to date:
  219.  
  220.     1.0  --- The original. (1989)
  221.     1.10 --- Major restructuring of v. 1.0 to accomodate the IBM-PC.
  222.             (May, 1990)
  223.     1.20 --- Adds support for C++ and Fortran-90, as well as many other
  224.             new features, bug fixes, and improved documentation.
  225.     1.30 --- More bug fixes; a few new features.  See the appendix below. 
  226.             Version 1.30--beta (January 1, 1993).
  227.             Version 1.30--beta (Feburary 3, 1993).  A few
  228.                 glitches fixed.
  229.             ``Final'' version June 10, 1993.
  230.              Version 1.30a (June 17, 1993) Fixed a few glitches
  231.                 with @o.
  232. -------------------------------------------------------------------------------
  233.  
  234.   I will be happy to answer questions about installing or using FWEB, and
  235. to receive suggestions and bug reports.  Unfortunately, I CAN NO LONGER
  236. GUARANTEE AN IMMEDIATE RESPONSE due to severe funding difficulties in the
  237. U.S. fusion program and the consequent professional pressures.  Experience
  238. has shown that providing daily support for FWEB is incompatible with
  239. carrying on a full schedule of professional research.  Therefore, please
  240. understand that this is a SPARE-TIME ACTIVITY; thanks very much for your
  241. patience. 
  242.  
  243. ---John
  244. June 10, 1993
  245.  
  246. krommes@princeton.edu                           |  John A. Krommes
  247.                                                 |  Plasma Physics Laboratory
  248. (Mail to krommes@princeton.edu is forwarded     |  P.O. Box 451
  249. to krommes@lyman.pppl.gov == 192.55.106.129)    |  Princeton, NJ  08543
  250.  
  251. (To ftp files, you must use lyman.pppl.gov.)    |  Phone:  (609) 243--2606  
  252.  
  253. ===============================================================================
  254.  
  255. APPENDIX A:  BUGS newly discovered with version 1.30
  256.  
  257.   The following list will be updated as bugs, questions, and/or annoyances
  258. are reported.  Typically the bugs listed here will already be fixed in my
  259. development version, but the fixes won't yet be reflected in the public
  260. release.  If you're being held up by one of the bugs listed here (or
  261. especially by one NOT listed here), please contact me.
  262.  
  263. FWEAVE:
  264.  
  265.     After saying ``@f `\@@ 11'', identifiers such as \a@b (input as
  266. ``\a@@b'') appeared in the index with two @'s instead of one.
  267.  
  268.     Fixed for next release.
  269.  
  270.  
  271. APPENDIX B:  BUGS and REMARKS ABOUT v1.30--beta and previous versions
  272.  
  273.  
  274.                --- SERIOUS BUGS ---
  275.  
  276. BOOTSTRAPPING:
  277.  
  278. * FWEB wasn't debugged on non-ASCII machines.
  279.  
  280.     V1.2 was debugged thanks to Thorsten Ohl.
  281.     I don't think v1.30 has been tried yet.
  282.  
  283. * MACINTOSH support not provided.
  284.  
  285.     If you SERIOUSLY want FWEB on the Mac, vote by sending me a message.
  286.     (I haven't gotten many so far.)
  287.  
  288.  
  289. RATFOR:
  290.  
  291. * Right braces are not recognized properly when buried inside a WEB macro
  292. definition.  
  293.  
  294.     Try replacing the macro definition with a WEB module.  If that
  295. doesn't work, please let me know.
  296.  
  297. * The expansion of a |switch| statement uses a dummy variable like I90000
  298. that isn't declared.  This causes grief when one uses a compiler switch
  299. that forces all variables to be declared.
  300.  
  301.     Sorry:  This one's nontrivial, and it's NOT fixed yet.  (The
  302. problem only arises when the |switch| is not expanded into a computed
  303. |goto|.  In some cases you might be able force it to use the computed
  304. |goto| even if it doesn't naturally want to; try using the -rgm1 option.)
  305.  
  306.  
  307.          --- MINOR ANNOYANCES (to most people) ---
  308.  
  309. COMMON:
  310.  
  311. * In Fortran, when using !! comments the semicolon isn't put
  312. before it properly.
  313.  
  314.     NOT FIXED YET!!!  (Use // ... for short comments.)
  315.  
  316. * In Fortran--90, free-form syntax doesn't insert semicolons.
  317.  
  318.     NOT FIXED.  (And maybe won't be.)
  319.  
  320.  
  321.  
  322.  
  323. FTANGLE:  
  324.  
  325. * The following construction doesn't work right in Fortran:
  326.  
  327.     /*
  328.         include 'a'
  329.     */    include 'b'
  330.  
  331.     The fix is to terminate the comment on a line by itself.
  332.  
  333.  
  334.  
  335. FWEAVE:  
  336.  
  337. * @<|Fortran code|@> doesn't always format right; problems with semicolons
  338. in module names, and other things.
  339.  
  340.     NOT FIXED YET.
  341.  
  342. * C++ functions such as `+' weren't placed into the index, and the next
  343. identifier was spuriously marked as defined.
  344.  
  345.     `+' and similar things are now put into index.  
  346.     MARKING PROBLEM NOT ENTIRELY FIXED. To turn off the subscripting,
  347. say ``mark_defined.fcn_name 0'' in fweb.sty.
  348.  
  349. * C initializations get an extra space after the variable name.
  350.  
  351.     NOT FIXED YET.
  352.  
  353. * In C or C++, doesn't format certain constructions like
  354.  
  355. -------------------------------------------------------------------------------
  356. void fct1(int (*)[VSIZE]);
  357. -------------------------------------------------------------------------------
  358.  
  359. correctly.
  360.  
  361.     A TEMPORARY FIX is to use @e in place of the implicit variable, as
  362. in
  363.  
  364. -------------------------------------------------------------------------------
  365. void fct1(int (*@e)[VSIZE]);
  366. -------------------------------------------------------------------------------
  367.  
  368. * Connection machine Fortran (CM-Fortran) has some extensions not in
  369. Fortran--90. 
  370.  
  371.     As a temporary measure, try
  372.  
  373. -------------------------------------------------------------------------------
  374. @f forall if
  375. @f times only
  376. @f diagonal all
  377. @f rank all
  378. @f replicate all
  379. @f project all
  380. @f firstloc all
  381. @f lastloc all
  382.  
  383.  
  384. FWEBMAC:
  385.  
  386. * Output routine doesn't interact well with LaTeX's figure environment and
  387. epsf.sty. 
  388.  
  389.     This is because fwebmac.sty usurps the \output routine.  Someday
  390.     this will be fixed.
  391.  
  392.  
  393. MACRO PROCESSING:  
  394.  
  395. * _M(foo (bar)) behaves as a one-argument macro. 
  396.  
  397.     You may now say _M(foo=(bar)) to get the effect of ``@m foo (bar)''.
  398.  
  399. * _ERROR is evaluated even for unprocessed arguments in _IFCASE.
  400.  
  401.     NOT FIXED YET.
  402.  
  403. RATFOR:
  404.  
  405. * Certain Fortran and Ratafor error messages aren't continued properly in
  406. the tangled output.
  407.  
  408.     NOT FIXED, but harmless since you ought to fix up the error anyway
  409. before attempting to compile.
  410.  
  411.  
  412.  
  413.       --- RECENT (v1.30--beta) FEATURES and IMPROVEMENTS ---
  414.  
  415. WARNING: Some of the following enhancements may not be stable.  It may
  416. not be a good idea to use them just yet for extensive programming
  417. projects.  However, experimentation and comments are encouraged.
  418.  
  419. COMMON (command-line, @ commands, etc.):
  420.  
  421. * The @" command was missing.
  422.  
  423.     Implemented @"..." (translate string to ASCII) in a way close to
  424. the action of @'...'.  Also added the analogous built-in macro _A.
  425.  
  426. * The -x command kills off not only the index, but also module list and
  427. table of contents.
  428.  
  429.     This command really means ``don't bother with ANY cross-reference
  430. information''.  It's been generalized to the form ``-x[??]'', where the
  431. optional question marks are one or more of `*cim', standing for
  432.  
  433.         * --- ``everything''
  434.         c --- ``contents''
  435.         i --- ``index''
  436.         m --- ``modules''
  437.  
  438. The command ``-x' is equivalent to ``-x*'', which means kill everything.
  439. The command ``-xim'' means kill off the index and module list, etc.
  440.  
  441. * Couldn't query memory allocation settings.
  442.  
  443.     Now, if you say ``-yaa'', you query the present setting for the
  444. dynamic memory buffer whose abbreviation is ``aa''.  To query everything,
  445. say ``-y''.
  446.  
  447. * Added command-line option -D to see the reserved words of the current
  448. language.  
  449.  
  450.     For example,
  451.  
  452. -------------------------------------------------------------------------------
  453. -Lc -Dabc
  454. -------------------------------------------------------------------------------
  455.  
  456. prints all the reserved words of the C language beginning with "abc".
  457. (-D*abc does all languages.)
  458.  
  459. * Added command-line option -p to set a style-file parameter.
  460.  
  461.     Thus default style-file settings can be put into .fweb---e.g.,
  462. -------------------------------------------------------------------------------
  463. +pmeta.top.N "start"
  464. +pmeta.bottom.N "done"
  465. -------------------------------------------------------------------------------
  466.  
  467. * Added -Z option to obtain the defaults for style-file parameters.  
  468.  
  469.     -Zabc prints the default values of all style-file parameters
  470. beginning with "abc", and also prints any ones that were modified by
  471. fweb.sty.  --Zabc only prints the modified ones.
  472.  
  473.     There are still a few problems with this command:  it doesn't do colors
  474. correctly, and one can't see the default setting of command codes (which
  475. aren't initialized until later).
  476.  
  477.     
  478.  
  479. FTANGLE:
  480.  
  481. * Compiler directives didn't interact well with the macro preprocessor.  In
  482. particular, macro arguments after a @! weren't substituted since the entire
  483. text of a @! was treated as a string.
  484.  
  485.     Temporarily, the @? command has been defined to be a compiler
  486. directive, but with a different mode of parsing the text of the command.
  487. This allows one to define macros such as
  488.  
  489. -------------------------------------------------------------------------------
  490. @m A(x,y) @? a[x][y]
  491. -------------------------------------------------------------------------------
  492.  
  493. in which the |x| and |y| are properly expanded.
  494.  
  495.     It is intended that @? become the standard directive command in the
  496. future.  Therefore, please change your compiler directives to @? and report any
  497. problems.
  498.  
  499. *Added the truncation command -t.  
  500.  
  501.     If you say, for example, ``-tc6'', all ordinary C variables (not
  502. WEB macros, reserved words, or intrinsic functions) will be truncated to 6
  503. characters.  If this produces any nonuniqueness, a sorted list of the
  504. conflicts will be written to the terminal.  You can specify a list of
  505. characters to remove (``filter'') during the truncation by appending a
  506. brace-delimited list.  For example, ``-tn6{_}'' would turn both of the
  507. Fortran variables |abcdefg| and |abc_defg| into |abcdef| and then would
  508. complain about ``non-unique FORTRAN variables.''  (But it wouldn't mess
  509. with reserved words such as |program| or |precision|.)
  510.  
  511.     For this command to be truly useful for generating compilable code, it
  512. needs a mechanism for making unique variables from the non-unique ones.
  513. I'm still thinking about that.  Meanwhile, it can still serve as
  514. development tool to help make you make your codes portable.  (For example,
  515. ANSI C says that compilers need support external variables of just 6
  516. characters or less.)
  517.  
  518. FWEAVE:
  519.  
  520. * Can't get '|' in TeX text, especially between LaTeX's \begin{\verbatim}
  521. and \end{verbatim}.
  522.  
  523.     Generalized the `@|' command to output '|' in TeX mode.
  524.  
  525. * Bad @ commands (valid for neither FTANGLE nor FWEAVE) aren't flagged in
  526. any way.
  527.  
  528.     Now a warning message is (often) generated.
  529.  
  530. * Couldn't have module names inside |...|.  For example, one couldn't say
  531. ``The module |@<Graphics@>|, defined below...''.  
  532.  
  533.     Hopefully fixed (with relatively DANGEROUS and EXTENSIVE CHANGES to
  534. Knuth's original design).  Contemplate constructions such as ``|@<A =
  535. |@<B@>|@>|''.  The changes give rise to related complications such as
  536. correctly handling things like ``|@.|@>|''.)
  537.  
  538. * In C, couldn't typeset the `or' symbol '|' between vertical bars.  In other
  539. words, one couldn't say ``|x|y|'' because the `or' terminated the code mode.
  540.  
  541.     Fixed by introducing the token `|||' as a synonym for '|'.  Thus,
  542. say ``|x|||y|''.  (At present, this doesn't work with FTANGLE in the code
  543. part, but it's not necessary there.)
  544.  
  545. * Added the @W command.
  546.  
  547.     The @W command (still experimental) tells FWEAVE to overload an
  548. IDENTIFIER---that is, to change its appearance on output.  (Distinguish
  549. this command from the @v command, which overloads OPERATORS such as + or
  550. .FALSE.)  There are three forms of this command:
  551.  
  552.     @W x .    // Equivalent to ``@W x \x''
  553.     @W x \y    // In the woven output, replaces ``x'' by the TeX macro ``\y''.
  554.     @W x "TeX text" // In the woven output, replaces ``x'' by the TeX text.
  555.  
  556. For some applications this command can be used to advantage to beautify the
  557. typeset output.  For example, in you were working with covariant notation
  558. in C, you might want to print |A[a][b]| as
  559.  
  560.          \alpha
  561.     A
  562.            \beta
  563.  
  564. You could accomplish this by saying
  565.  
  566. -------------------------------------------------------------------------------\def\A[#1][#2]{A^{#1}{}_{#2}}
  567.  
  568. @W A .
  569. @W a \alpha
  570. @W b \beta
  571. -------------------------------------------------------------------------------
  572.  
  573. A significant deficiency of the command in its present form is that it
  574. doesn't take arguments (unlike WEB macro definitions).  This means that a
  575. scheme like the above won't work right with nested calls such as
  576. A[A[1][2]][3] because \TeX's macro processor would stop at the first right
  577. bracket it found, which would be the wrong one in this case.  In cases like
  578. this you probably shouldn't be doing such complicated overloading anyway,
  579. as the typeset output might be too far removed from the actual code.  In
  580. any event, the changes necessary to allow the @W definitions to take
  581. arguments are extremely complicated, so probably won't be done soon.
  582.  
  583. * Added the @- command to allow one to delete selected variables from the
  584. index.  
  585.  
  586.     If you precede a variable by @- (anywhere, just once), then the
  587. variable won't be printed in the index.
  588.  
  589. * Added a special bracket-processing feature.
  590.  
  591.     When the option `-W[' is used, FWEAVE replaces square brackets by a
  592. special TeX macro.  This helps one to pretty up the formatting of array
  593. indices.  See the user manual for more details.
  594.  
  595. FWEBMAC:
  596.  
  597. * Block numbering (-b option) wasn't defined in the most general way.
  598.  
  599.     Introduced the fwebmac macro \Wblock so user has control over the
  600. formatting. 
  601.  
  602. * The same variable \parindent was used for various kinds of indents.
  603.  
  604.     Introduced \TeXindent in addition to \notch.
  605.     Changed style-file variable ``parindent'' to ``indent.TeX'';
  606. introduced ``indent.code''.
  607.  
  608.  
  609. MACRO PROCESSING:
  610.  
  611. * Couldn't stringize to a single-quoted string in C.
  612.  
  613.     Added the #' and #" macro tokens.  E.g.,
  614.  
  615.   @m A(argument) #'argument
  616.  
  617. puts single quotes around the argument in C.
  618.  
  619. * No macro for returning a standardized number for the current language.
  620.  
  621.     Added _LANGUAGE_NUM, which can be used with an _IFCASE for
  622. language-dependent processing.
  623.  
  624. * No facility for easily debugging macros.
  625.  
  626.     Added _DUMPDEF.  Takes as arguments a list of macro calls, then
  627. dumps both the original definitions and the current expansion to the terminal.
  628.  
  629. * Couldn't change the case of a macro argument.
  630.  
  631.     Added the built-ins _U and _L, which change strings to upper or
  632. lower case. 
  633.  
  634. * Added the built-in macros _INPUT_LINE, _OUTPUT_LINE, _MODULE_NAME,
  635. _SECTION_NUM.  
  636.  
  637.     These can be used to improve the quality of diagnostic
  638. messages constructed with the macro processor.
  639.  
  640. * Added the built-in function _DO(I,imin,imax){...} or
  641. _DO(I,imin,imax,di){...}. 
  642.  
  643.     This repetitively defines the WEB macro |I| like a Fortran do would:
  644. do I=imin,imax,di.  Thus
  645.  
  646. -------------------------------------------------------------------------------
  647. @c
  648. @
  649. @a
  650. _DO(I,1,5)
  651. {a[I] = b[I];}
  652. -------------------------------------------------------------------------------
  653.  
  654. tangles into 5 statements, the fourth of which is ``a[4] = b[4];''.
  655.  
  656. * To go along with the above, added the construction #[I] to the
  657. preprocessor.  
  658.  
  659.     Here I must be an integer (possibly via a WEB macro).  The
  660. construction #[2] refers to the second argument of the macro call
  661. (including the fixed arguments).  (Compare this to #2, which is the second
  662. variable argument.)  #[0] means the total number of arguments in the call.
  663. Thus, in
  664.  
  665. -------------------------------------------------------------------------------
  666. @m A(x,y,...) #[0],#[2],#0,#2
  667. -------------------------------------------------------------------------------
  668.  
  669. the call ``A(f1,f2,v1,v2,v3)'' expands into ``5,f2,3,v2''.  
  670.  
  671. ===============================================================================
  672.  
  673. APPENDIX C:  COMMON QUESTIONS
  674.  
  675. * Where does one get the utility makeindex, needed for producing the index
  676. to the manual?
  677.  
  678.     ftp.math.utah.edu:/pub/tex/pub/makeindex/2-11
  679.  
  680. (The extension .trz is equivalent to .tar.Z.)
  681.  
  682. * What must one do to use LaTeX instead of TeX?
  683.  
  684.     Basically nothing.  Just say ``fweave webfile -PL'' instead of
  685. ``fweave webfile'', then use latex instead of tex.  The -P option tells FWEAVE
  686. which TeX processor will be used; -PL changes the names of certain
  687. macros---in particular, \\---output by FWEAVE to avoid conflicts with
  688. LaTeX.  If you never use \\ in your LaTeX code, then you don't need the -PL
  689. option.
  690.  
  691. * With LaTeX, how do I inform FWEAVE that I want to use additional macro
  692. packages or style files?
  693.  
  694.     Put into fweb.sty the line ``LaTeX.options "eqalign,my" if you want it
  695. to read eqalign.sty and my.sty.
  696.  
  697. * Can one customize the indentation of the braces in C or Ratfor code that
  698. weaves like the following?
  699.  
  700. -------------------------------------------------------------------------------
  701.     if(x) 
  702.         {
  703.         stuff;
  704.         }
  705. -------------------------------------------------------------------------------
  706.  
  707.     As long as you don't want the { on the same line as the if, you can
  708. simply redefine \{ and \}, such as
  709.  
  710.     \def\{{\4\LB}
  711.     \def\}{\kern-0.5\notch\RB}
  712.  
  713. to get the strange effect in which the left brace is one whole tab width to
  714. the left of where it's usually put and the right brace is a half tab width
  715. to the left---i.e.,
  716.  
  717.     if(x)
  718.     {
  719.         stuff;
  720.         }
  721.  
  722.